]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
user-menu: Restore previous session presence at startup
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 6 Oct 2011 00:47:18 +0000 (02:47 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Fri, 7 Oct 2011 05:24:21 +0000 (07:24 +0200)
Save the session presence in GSettings and restore it on startup.

https://bugzilla.gnome.org/show_bug.cgi?id=659021

data/org.gnome.shell.gschema.xml.in
js/ui/userMenu.js

index a848818d2fc3784427eab8556d4e9cef75e08f22..82b0c331ddfa572a42c5298c6908061da9a09d2d 100644 (file)
       <default>0</default>
       <_summary></_summary>
     </key>
+    <key name="saved-session-presence" type="i">
+      <default>0</default>
+      <_summary></_summary>
+    </key>
     <child name="clock" schema="org.gnome.shell.clock"/>
     <child name="calendar" schema="org.gnome.shell.calendar"/>
     <child name="recorder" schema="org.gnome.shell.recorder"/>
index 85d98028ed8268570dc357daded2e267566083b0..d6e30af78bd45784a7a6a2f0663cc4abb9692aa9 100644 (file)
@@ -158,10 +158,11 @@ IMStatusChooserItem.prototype = {
                             Lang.bind(this, this._changeIMStatus));
 
         this._presence = new GnomeSession.Presence();
-        this._presence.getStatus(Lang.bind(this, this._sessionStatusChanged));
         this._presence.connect('StatusChanged',
                                Lang.bind(this, this._sessionStatusChanged));
 
+        this._sessionPresenceRestored = false;
+        this._imPresenceRestored = false;
         this._currentPresence = undefined;
 
         this._accountMgr = Tp.AccountManager.dup()
@@ -267,12 +268,20 @@ IMStatusChooserItem.prototype = {
     },
 
     _IMStatusChanged: function(accountMgr, presence, status, message) {
+        if (!this._imPresenceRestored)
+            this._imPresenceRestored = true;
+
         if (presence == this._currentPresence)
             return;
 
         this._currentPresence = presence;
         this._setComboboxPresence(presence);
 
+        if (!this._sessionPresenceRestored) {
+            this._presence.getStatus(Lang.bind(this, this._sessionStatusChanged));
+            return;
+        }
+
         if (presence == Tp.ConnectionPresenceType.AVAILABLE)
             this._presence.setStatus(GnomeSession.PresenceStatus.AVAILABLE);
 
@@ -349,6 +358,20 @@ IMStatusChooserItem.prototype = {
     },
 
     _sessionStatusChanged: function(sessionPresence, sessionStatus) {
+        if (!this._imPresenceRestored)
+            return;
+
+        if (!this._sessionPresenceRestored) {
+            let savedStatus = global.settings.get_int('saved-session-presence');
+            if (sessionStatus != savedStatus) {
+                this._presence.setStatus(savedStatus);
+                return;
+            }
+            this._sessionPresenceRestored = true;
+        }
+
+        global.settings.set_int('saved-session-presence', sessionStatus);
+
         let [presence, s, msg] = this._accountMgr.get_most_available_presence();
         let newPresence, status;